/*============================================================================*/
/*                        Tortoise Team			                              */
/*============================================================================*/
/*                        OBJECT SPECIFICATION                                */
/*============================================================================*
* C Source:         %HAL_DipSwitch.c%
* Instance:         RPL_1
* %version:         1.0 %
* %created_by:      Andres Torres Garcia %
* %date_created:    Monday Nov  19 14:38:03 2012 %
*=============================================================================*/
/* DESCRIPTION : C source file for the hardware layer of the DipSwitch        */
/*============================================================================*/
/* FUNCTION COMMENT : This file contains the declarations and definitions of  */
/*					  the variables, and functions of the hardware layer of   */													  
/*					  the DipSwitch.										  */ 
/*============================================================================*/
/*                               OBJECT HISTORY                               */
/*============================================================================*/
/*  REVISION |   DATE      |                               |      AUTHOR      */
/*----------------------------------------------------------------------------*/
/*  1.0      | 19/11/2012  |                               | Andres Torres    */
/* Integration under Continuus CM                                             */
/*============================================================================*/

/* Includes */
/* -------- */
#include "MAL_IOAPI.h"
#include "stdtypedef.h"
#include "HAL_DipSwitch.h"

/* Functions macros, constants, types and datas         */
/* ---------------------------------------------------- */
/* Functions macros */

/*==================================================*/ 
/* Definition of constants                          */
/*==================================================*/ 


/*======================================================*/ 
/* Definition of RAM variables                          */
/*======================================================*/ 

/*======================================================*/ 
/* close variable declaration sections                  */
/*======================================================*/ 

/* Private defines */

/* Private functions prototypes */
/* ---------------------------- */


/* Exported functions prototypes */
/* ----------------------------- */

void vfnInit_DipSwitch(void);
T_UBYTE IsSwitchPulled(T_UBYTE ub_switch);
void AreSwitchsPulled(T_UBYTE ub_switchs[]);
T_UBYTE IsOneSwitchPulledAtTime(void);

/* Inline functions */
/* ---------------- */

/* Private functions */
/* ----------------- */
/**************************************************************
 *  Name                 : 
 *  Description          :
 *  Parameters           :  [Input, Output, Input / output]
 *  Return               :
 *  Critical/explanation :    No
 **************************************************************/

/* Exported functions */
/* ------------------ */

/**************************************************************
 *  Name                 :  vfnInit_DipSwitch
 *  Description          :  Initialize the dip Switch
 *  Parameters           :  [Input, Output, Input / output]
 *  Return               :	void
 *  Critical/explanation :    No
 **************************************************************/
  ///////////////////////////////////////////////////////////////////////
/// \brief Initialize the dip Switch
///////////////////////////////////////////////////
void vfnInit_DipSwitch(void)
{
	IO_SetPinAsInput(SWITCH_1, 1);
	IO_SetPinAsInput(SWITCH_2, 1);
	IO_SetPinAsInput(SWITCH_3, 1);
	IO_SetPinAsInput(SWITCH_4, 1);
}

/**************************************************************
 *  Name                 : 	IsSwitchPulled
 *  Description          :	Check if a specific switch is pulled.
 *  Parameters           :  [Input: ub_switch: the switch to check, Output, Input / output]
 *  Return               :	return 1 if the dipSwitch is pulled otherwise 0.
 *  Critical/explanation :    No
 **************************************************************/
 ///////////////////////////////////////////////////////////////////////
/// \brief Check if a specific switch is pulled.
/// \param ub_switch The switch to check.
/// \return return 1 if the dipSwitch is pulled otherwise 0.
/////////////////////////////////////////////////////////////////////////
T_UBYTE IsSwitchPulled(T_UBYTE ub_switch)
{
	return IO_PinReadInput(ub_switch);
}

/**************************************************************
 *  Name                 : 	IsOneSwitchPulledAtTime
 *  Description          :	Check if one switch is pulled
 *  Parameters           :  [Input, Output, Input / output]
 *  Return               :	Return the switch pulled, otherwise 0
 *  Critical/explanation :    No
 **************************************************************/
  ///////////////////////////////////////////////////////////////////////
/// \brief Check if one switch is pulled
/// \return Return the switch pulled, otherwise 0
/////////////////////////////////////////////////////////////////////////
T_UBYTE IsOneSwitchPulledAtTime(void)
{
	if(IsSwitchPulled(SWITCH_1))
	{
		return SWITCH_1;
	}
	else if(IsSwitchPulled(SWITCH_2))
	{
		return SWITCH_2;
	}
	else if(IsSwitchPulled(SWITCH_3))
	{
		return SWITCH_3;
	}
	else if(IsSwitchPulled(SWITCH_4))
	{
		return SWITCH_4;
	}
	
	return 0;
}


/**************************************************************
 *  Name                 : 	AreSwitchsPulled
 *  Description          :	Check for all the switches pulled.
 *  Parameters           :  [Input, Output, Input / output: ub_switchs[] Where the function is going to put the values.]
 *  Return               :	void
 *  Critical/explanation :    No
 **************************************************************/
  ///////////////////////////////////////////////////////////////////////
/// \brief Check for all the switches pulled.
/// \param ub_switchs[] Where the function is going to put the values.
/////////////////////////////////////////////////////////////////////////
void AreSwitchsPulled(T_UBYTE ub_switchs[])
{
	if(IsSwitchPulled(SWITCH_1))
	{
		ub_switchs[0] = 1;
	}
	else
	{
		ub_switchs[0] = 0;
	}
	
	if(IsSwitchPulled(SWITCH_2))
	{
		ub_switchs[1] = 1;
	}
	else
	{
		ub_switchs[1] = 0;
	}
	
	if(IsSwitchPulled(SWITCH_3))
	{
		ub_switchs[2] = 1;
	}
	else
	{
		ub_switchs[2] = 0;
	}
	
	if(IsSwitchPulled(SWITCH_4))
	{
		ub_switchs[3] = 1;
	}
	else
	{
		ub_switchs[3] = 0;
	}
}